অ্যাপাচি পিগ (Apache Pig) একটি শক্তিশালী ডেটা প্রসেসিং টুল যা Hadoop এর উপরে কাজ করে এবং ডেটা ট্রান্সফরমেশন, ফিল্টারিং, গ্রুপিং এবং বিশ্লেষণের জন্য ব্যবহার করা হয়। JOIN এবং CROSS হল দুইটি গুরুত্বপূর্ণ অপারেটর যা ডেটা সেটের মধ্যে সম্পর্ক তৈরি করতে সাহায্য করে। এই অপারেটরগুলির মাধ্যমে আপনি একাধিক ডেটা টেবিল বা রিলেশনকে একত্রিত করতে পারেন।
এখানে আমরা JOIN এবং CROSS অপারেটর ব্যবহার করে ডেটা জয়েনিং-এর বিস্তারিত আলোচনা করব।
১. JOIN কমান্ড: ডেটা একত্রিত করার জন্য
JOIN অপারেটরটি দুটি বা তার বেশি ডেটা সেটকে একত্রিত করার জন্য ব্যবহৃত হয়। এটি সাধারণত একটি সাধারণ কলামের ভিত্তিতে ডেটা যুক্ত করতে ব্যবহৃত হয়, যেমন SQL এর JOIN কমান্ড।
সিনট্যাক্স:
joined_data = JOIN relation1 BY key, relation2 BY key;
relation1এবংrelation2: দুটি ডেটা রিলেশন বা টেবিল।key: সেই কলাম বা ফিল্ড যার ভিত্তিতে ডেটা রিলেশন দুটি যুক্ত হবে।
JOIN অপারেটরের ধরন:
- INNER JOIN: দুটি টেবিলের মধ্যে যেসব রেকর্ডের মিল রয়েছে, শুধু সেই রেকর্ডগুলি নির্বাচন করে।
- LEFT OUTER JOIN: প্রথম টেবিলের সমস্ত রেকর্ড রাখে এবং দ্বিতীয় টেবিলের মিল পাওয়া রেকর্ডগুলিই যুক্ত করে।
- RIGHT OUTER JOIN: দ্বিতীয় টেবিলের সমস্ত রেকর্ড রাখে এবং প্রথম টেবিলের মিল পাওয়া রেকর্ডগুলিই যুক্ত করে।
- FULL OUTER JOIN: দুটি টেবিলের সমস্ত রেকর্ড রাখে এবং যেখানে মিল থাকে সেখানে রেকর্ড যুক্ত হয়।
JOIN কমান্ডের ব্যবহার উদাহরণ
ধরা যাক আমাদের দুটি ডেটা রিলেশন আছে: students এবং grades। students টেবিলের মধ্যে ছাত্রদের নাম এবং বয়স রয়েছে, এবং grades টেবিলের মধ্যে ছাত্রদের নাম এবং তাদের গ্রেড রয়েছে। আমাদের লক্ষ্য হলো ছাত্রদের নামের ভিত্তিতে এই দুটি টেবিলকে একত্রিত করা।
students টেবিল:
| name | age |
|---|---|
| Alice | 22 |
| Bob | 23 |
| Charlie | 21 |
grades টেবিল:
| name | grade |
|---|---|
| Alice | A |
| Bob | B |
| Charlie | A |
Pig Latin কোড:
students = LOAD 'students_data.txt' USING PigStorage(',') AS (name:chararray, age:int);
grades = LOAD 'grades_data.txt' USING PigStorage(',') AS (name:chararray, grade:chararray);
joined_data = JOIN students BY name, grades BY name;
DUMP joined_data;
এখানে, আমরা students এবং grades টেবিলের name ফিল্ডের মাধ্যমে JOIN করছি, এবং DUMP কমান্ডের মাধ্যমে ডেটা ডিসপ্লে করাচ্ছি।
আউটপুট:
| name | age | name | grade |
|---|---|---|---|
| Alice | 22 | Alice | A |
| Bob | 23 | Bob | B |
| Charlie | 21 | Charlie | A |
এটি একটি INNER JOIN হবে, কারণ উভয় টেবিলেই নাম মেলে এমন রেকর্ডগুলোই এখানে দেখানো হচ্ছে।
২. CROSS কমান্ড: ডেটা সেটের মধ্যে ক্রস প্রোডাক্ট
CROSS কমান্ডটি দুটি ডেটা রিলেশনের মধ্যে ক্রস প্রোডাক্ট তৈরি করে, অর্থাৎ দুটি টেবিলের সব রেকর্ডের সমন্বয়ে নতুন রেকর্ড তৈরি করা হয়। এটি দুটি রিলেশনের সব রেকর্ডের সমস্ত সম্ভব জোড়া তৈরি করে। CROSS অপারেটরটি সাধারণত ছোট ডেটা সেটের জন্য ব্যবহার করা হয়, কারণ এটি বড় ডেটা সেটের সাথে কাজ করার সময় অনেক বেশি রেকর্ড তৈরি করতে পারে।
সিনট্যাক্স:
crossed_data = CROSS relation1, relation2;
relation1এবংrelation2: দুটি ডেটা রিলেশন বা টেবিল।
CROSS অপারেটরের ব্যবহার উদাহরণ
ধরা যাক আমাদের দুটি ডেটা রিলেশন আছে: students এবং courses। আমাদের লক্ষ্য হলো এই দুটি টেবিলের সব সম্ভব জোড়া তৈরি করা।
students টেবিল:
| name | age |
|---|---|
| Alice | 22 |
| Bob | 23 |
courses টেবিল:
| course |
|---|
| Math |
| Science |
Pig Latin কোড:
students = LOAD 'students_data.txt' USING PigStorage(',') AS (name:chararray, age:int);
courses = LOAD 'courses_data.txt' USING PigStorage(',') AS (course:chararray);
crossed_data = CROSS students, courses;
DUMP crossed_data;
এখানে, students এবং courses টেবিলের মধ্যে ক্রস প্রোডাক্ট তৈরি করা হয়েছে।
আউটপুট:
| name | age | course |
|---|---|---|
| Alice | 22 | Math |
| Alice | 22 | Science |
| Bob | 23 | Math |
| Bob | 23 | Science |
এটি CROSS JOIN হবে, যেখানে students টেবিলের প্রতিটি রেকর্ড courses টেবিলের প্রতিটি রেকর্ডের সাথে একত্রিত হবে।
সারাংশ
JOIN এবং CROSS কমান্ডগুলি পিগে ডেটা জয়েনিং এর জন্য গুরুত্বপূর্ণ অপারেটর। JOIN অপারেটরটি সাধারণত এক বা একাধিক রিলেশনকে একটি কমন কিপরে যুক্ত করতে ব্যবহৃত হয়, যা SQL-এর JOIN অপারেটরের মতোই কাজ করে। অন্যদিকে, CROSS অপারেটরটি দুটি রিলেশনের মধ্যে সমস্ত সম্ভাব্য জোড়া তৈরি করে, যার ফলে এটি ডেটার ক্রস প্রোডাক্ট তৈরি করে।
- JOIN: দুইটি রিলেশন বা টেবিলকে সাধারণ কিপের মাধ্যমে একত্রিত করে।
- CROSS: দুইটি রিলেশন বা টেবিলের মধ্যে ক্রস প্রোডাক্ট তৈরি করে।
এই অপারেটরগুলি বড় ডেটা সিস্টেমে ডেটা বিশ্লেষণ এবং প্রক্রিয়াকরণ করার জন্য খুবই কার্যকরী এবং শক্তিশালী টুল হিসেবে ব্যবহৃত হয়।
Read more